/*
 * pantallaCita.java
 *
 * Created on 01-may-2011, 20:18:38
 */

package interfaces.farmacia;

import Controlador.Controlador;
import GestorCitas.*;
import GestorClinico.*;
import GestorPruebas.*;
import GestorUsuarios.*;
import GestorFarmacia.*;

import clinica.*;
import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;

import clinica.Interfaz.*;
import javax.swing.ImageIcon;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import org.jdesktop.application.Action;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

/**
 *
 * @author eslogan
 */
public class pantallaCita extends javax.swing.JPanel {

   public class MyRenderer extends DefaultTableCellRenderer {
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value,
                                                     boolean isSelected, boolean hasFocus,
                                                     int row, int column) {
            ImageIcon icon = null;
            if(value.equals("Si")) {
                icon = new ImageIcon(getClass().getResource("/interfaces/resources/Box-green-32.png"));
            } else if(value.equals("No"))
                icon = new ImageIcon(getClass().getResource("/interfaces/resources/Box-red-32.png"));

            setIcon(icon);
            setHorizontalAlignment(CENTER);
            return this;
      }
    }

    public void refresh() {
        apellidos.setFont(Interfaz.setFontSizeDinamic());
        btnbuscar.setFont(Interfaz.setFontSizeDinamic());
        btncitaDetallada.setFont(Interfaz.setFontSizeDinamic());
        correo.setFont(Interfaz.setFontSizeDinamic());
        dni.setFont(Interfaz.setFontSizeDinamic());
        fecha.setFont(Interfaz.setFontSizeDinamic());
        nombre.setFont(Interfaz.setFontSizeDinamic());
        sexo.setFont(Interfaz.setFontSizeDinamic());
        telefono.setFont(Interfaz.setFontSizeDinamic());
        jButton1.setFont(Interfaz.setFontSizeDinamic());
        jButton2.setFont(Interfaz.setFontSizeDinamic());
        jButton3.setFont(Interfaz.setFontSizeDinamic());
        jButton4.setFont(Interfaz.setFontSizeDinamic());
        jButton6.setFont(Interfaz.setFontSizeDinamic());
        jButton7.setFont(Interfaz.setFontSizeDinamic());
        jButton8.setFont(Interfaz.setFontSizeDinamic());
        jButton9.setFont(Interfaz.setFontSizeDinamic());
        jLabel1.setFont(Interfaz.setFontSizeDinamic());
        jLabel10.setFont(Interfaz.setFontSizeDinamic());
        jLabel11.setFont(Interfaz.setFontSizeDinamic());
        jLabel2.setFont(Interfaz.setFontSizeDinamic());
        jLabel3.setFont(Interfaz.setFontSizeDinamic());
        jLabel4.setFont(Interfaz.setFontSizeDinamic());
        jLabel5.setFont(Interfaz.setFontSizeDinamic());
        jLabel6.setFont(Interfaz.setFontSizeDinamic());
        jLabel7.setFont(Interfaz.setFontSizeDinamic());
        jLabel8.setFont(Interfaz.setFontSizeDinamic());
        jLabel9.setFont(Interfaz.setFontSizeDinamic());
        jTabbedPane1.setFont(Interfaz.setFontSizeDinamic());
        jPanel7.setBorder(Interfaz.setFontSizeBorder(jPanel7));
        jPanel3.setBorder(Interfaz.setFontSizeBorder(jPanel3));
        jPanel4.setBorder(Interfaz.setFontSizeBorder(jPanel4));
    }

    /** Creates new form SeleccionarListado */
    private ClinicaView app;
    private Cita _cita = null;
    private Paciente _paciente = null;
    private Interfaces _anterior = null;
    ArrayList<LineaReceta> _l_linea_receta = new ArrayList<LineaReceta>();
    Cita _citasAnteriores[] = null;
    ArrayList<Prueba> _l_prueba = new ArrayList<Prueba>();
    int row_modify = -1;

    /** Creates new form buscarCita */
    public pantallaCita (ClinicaView a) {
        app = a;
        initComponents();

        //tabla citas
        String[] columnNames = {"Médico","Fecha","Recetas","Pruebas"};
        modelo = new DefaultTableModel(null, columnNames);
        linea_cita.setModel(modelo);
        linea_cita.getColumn("Recetas").setCellRenderer(new MyRenderer());
        linea_cita.setRowHeight(32);
        linea_cita.getColumn("Recetas").setWidth(70);
        linea_cita.getColumn("Recetas").setMinWidth(70);
        linea_cita.getColumn("Recetas").setMaxWidth(70);

        linea_cita.getColumn("Pruebas").setCellRenderer(new MyRenderer());
        linea_cita.getColumn("Pruebas").setWidth(70);
        linea_cita.getColumn("Pruebas").setMinWidth(70);
        linea_cita.getColumn("Pruebas").setMaxWidth(70);

        linea_cita.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        linea_receta_panel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        linea_concertar_prueba.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

        btncitaDetallada.setVisible(false);
        btnbuscar.setVisible(false);

        linea_cita.setRowHeight(32);
        linea_receta_panel.setRowHeight(32);
        linea_concertar_prueba.setRowHeight(32);
        tabla_direcciones.setRowHeight(32);



        //Cargamos eventos para cambio de tab
        jTabbedPane1.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                cambioTab(evt);
            }
        });

        // Cargamos los eventos para el ratón linea_cita
        linea_cita.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                //System.out.println(linea_cita.getSelectedRow());
                if (linea_cita.getSelectedRow() >= 0)
                    btnbuscar.setEnabled(true);
            }
        });

        // Cargamos los eventos para el ratón linea_cita
        linea_receta_panel.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                //System.out.println(linea_cita.getSelectedRow());
                if (linea_receta_panel.getSelectedRow() >= 0)
                    btncitaDetallada.setEnabled(true);
            }
        });

    }

    public void rellenaDatos(Cita c, Interfaces ant) throws NoSuchAlgorithmException, IOException, ClassNotFoundException, SQLException, ParseException {
        _cita = c;
        _anterior = ant;
        /*Rellenamos datos de usuario*/
        _paciente = (Paciente) Usuario.get(_cita.getIdPaciente());
        if (_paciente != null){
            nombre.setText(_paciente.getNombre());
            apellidos.setText(_paciente.getApellidos());
            dni.setText(_paciente.getDniPasaporte());
            fecha.setText(_paciente.getFechaNacimiento().toString());
            correo.setText(_paciente.getCorreo());
            telefono.setText(""+_paciente.getTelefonoMovil());
            if(_paciente.getGenero()==GeneroUsuario.MASCULINO)
                sexo.setText("Hombre");
            else sexo.setText("Mujer");

            Interfaz.limpiarTabla(tabla_direcciones);

            Direccion [] direcciones = _paciente.getDirecciones();
            if(direcciones!=null)
            for(Direccion d:direcciones) {
                String [] valores = {d.getDireccion(),d.getLocalidad(),""+d.getCP(),d.getPais(),""+d.getTelefono()};
                ((DefaultTableModel)tabla_direcciones.getModel()).addRow(valores);
            }

            observacionesPaciente.setText(_paciente.getObservaciones());
        }

        //Rellenamos los datos del historial de citas
        _citasAnteriores = Cita.get(_cita.getIdPaciente(), null, null, null, null, EstadoCita.FINALIZADA);
        if (_citasAnteriores != null ) {
            rellenaDatosCitas();
        }

        limpiarTablaReceta();
        limpiarTablaPruebas();
        _l_linea_receta.clear();
        juicio.setText("");
        observaciones.setText("");
        observacionesCita.setText("");
        _l_prueba.clear();
    }
    
    private void limpiarTablaReceta() {
        Interfaz.limpiarTabla(linea_receta_panel);
    }

    private void limpiarTablaPruebas() {
        Interfaz.limpiarTabla(linea_concertar_prueba);
    }

    public void rellenaDatosReceta(LineaReceta linea) throws IOException, ClassNotFoundException, SQLException {
        DateFormat fecha = new SimpleDateFormat("dd/MM/yyyy");
        if (linea != null) {
           _l_linea_receta.add(linea);
        }
        limpiarTablaReceta();

        /* Colocamos en la tabla*/
        for(LineaReceta l:_l_linea_receta) {
            String estado = "Activa";
            if(l.getEstaCancelada()) estado = "Cancelada";
            String [] valores = {""+Medicamento.get(l.getIdMedicamento()).getNombreMedicamento(),
                                 "Cada "+l.getCada()+" "+l.getTiempoCada(),""+fecha.format(l.getFechaInicio()),""+l.getNumTomas(),""+estado};
            ((DefaultTableModel)linea_receta_panel.getModel()).addRow(valores);
        }
    }

    public void rellenaDatosPrueba(Prueba prueba) throws IOException, ClassNotFoundException, SQLException {
        DateFormat fecha = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
        if (prueba != null) {
           _l_prueba.add(prueba);
        }
        limpiarTablaPruebas();

        // Colocamos en la tabla
        for(Prueba p:_l_prueba) {
            String tipo ;
            if (p.getTipo() == TipoPrueba.BioquimicaGeneral)
                tipo = "Bioquimía general";
            else if (p.getTipo() == TipoPrueba.HematologiaGeneral)
                tipo = "Hematología general";
            else if (p.getTipo() == TipoPrueba.Hemostasia)
                tipo = "Hemostasia";
            else if (p.getTipo() == TipoPrueba.Hormonas)
                tipo = "Hormonas";
            else if (p.getTipo() == TipoPrueba.MarcadoresTumorales)
                tipo = "Marcadores tumorales";
            else if (p.getTipo() == TipoPrueba.Radiografia)
                tipo = "Radiografía";
            else
                tipo = "Análisis de orina";

            String [] valores = {tipo,fecha.format(p.getFecha())};
            ((DefaultTableModel)linea_concertar_prueba.getModel()).addRow(valores);
        }
    }

    public void rellenaDatosCitas() throws SQLException, IOException, ClassNotFoundException, NoSuchAlgorithmException, ParseException {
        DateFormat formatoFecha = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String[] columnNames = {"Médico","Fecha","Recetas","Pruebas"};
        Object[][] data = new Object[_citasAnteriores.length][];
        for(int i=0;i<_citasAnteriores.length;i++) {
            try {
                    Usuario m = Usuario.get(_citasAnteriores[i].getIdMedico());
                    Prueba[] p = Prueba.get(_citasAnteriores[i].getIdCita(), null, null, null, null, null, null, null);
                    Receta[] r = Receta.get(null, null, _citasAnteriores[i].getIdCita());
                    String pruebas = "No";
                    String recetas = "No";

                    int cont = 0;
                    if ( p != null)
                    for (Prueba pr : p ) {
                        if ( pr.getEstadoPrueba() == EstadoPrueba.Pendiente || pr.getEstadoPrueba() == EstadoPrueba.Realizada ||
                                pr.getEstadoPrueba() == EstadoPrueba.Visualizable)
                            cont++;
                    }
                    if ( cont > 0) {
                        pruebas = "Si";
                    }
                    if (r != null) {
                        recetas = "Si";
                    }
                    data[i] = new Object[4];
                    data[i][0] = m.getNombre() + " " + m.getApellidos() ;
                    data[i][1] = formatoFecha.format(_citasAnteriores[i].getFechaCita());
                    data[i][2] = recetas;
                    data[i][3] = pruebas;
            
            } catch (IDException ex) {}
            
        }

        modelo = new DefaultTableModel(data, columnNames) {
            @Override
            public boolean isCellEditable(int row, int col) {
                return false;
            }
        };

        linea_cita.setModel(modelo);
        linea_cita.getColumn("Recetas").setCellRenderer(new MyRenderer());
        linea_cita.setRowHeight(48);
        linea_cita.getColumn("Recetas").setWidth(55);
        linea_cita.getColumn("Recetas").setMinWidth(55);
        linea_cita.getColumn("Recetas").setMaxWidth(55);

        linea_cita.getColumn("Pruebas").setCellRenderer(new MyRenderer());
        linea_cita.getColumn("Pruebas").setWidth(48);
        linea_cita.getColumn("Pruebas").setMinWidth(55);
        linea_cita.getColumn("Pruebas").setMaxWidth(55);
    }

    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jTabbedPane1 = new javax.swing.JTabbedPane();
        jPanel1 = new javax.swing.JPanel();
        jPanel4 = new javax.swing.JPanel();
        jLabel2 = new javax.swing.JLabel();
        nombre = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        apellidos = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        dni = new javax.swing.JTextField();
        jLabel5 = new javax.swing.JLabel();
        correo = new javax.swing.JTextField();
        jLabel6 = new javax.swing.JLabel();
        telefono = new javax.swing.JTextField();
        jLabel7 = new javax.swing.JLabel();
        fecha = new javax.swing.JTextField();
        jLabel8 = new javax.swing.JLabel();
        sexo = new javax.swing.JTextField();
        jPanel3 = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        tabla_direcciones = new javax.swing.JTable();
        historial = new javax.swing.JPanel();
        jPanel7 = new javax.swing.JPanel();
        jScrollPane7 = new javax.swing.JScrollPane();
        linea_cita = new javax.swing.JTable();
        jScrollPane8 = new javax.swing.JScrollPane();
        observacionesPaciente = new javax.swing.JTextPane();
        jLabel11 = new javax.swing.JLabel();
        jPanel2 = new javax.swing.JPanel();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();
        jPanel5 = new javax.swing.JPanel();
        jScrollPane2 = new javax.swing.JScrollPane();
        linea_receta_panel = new javax.swing.JTable();
        jLabel9 = new javax.swing.JLabel();
        jLabel10 = new javax.swing.JLabel();
        jScrollPane3 = new javax.swing.JScrollPane();
        observaciones = new javax.swing.JTextPane();
        jScrollPane4 = new javax.swing.JScrollPane();
        juicio = new javax.swing.JTextPane();
        jPanel6 = new javax.swing.JPanel();
        jButton7 = new javax.swing.JButton();
        jButton8 = new javax.swing.JButton();
        jButton9 = new javax.swing.JButton();
        jScrollPane5 = new javax.swing.JScrollPane();
        linea_concertar_prueba = new javax.swing.JTable();
        jPanel8 = new javax.swing.JPanel();
        jScrollPane6 = new javax.swing.JScrollPane();
        observacionesCita = new javax.swing.JTextArea();
        jLabel1 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();
        btncitaDetallada = new javax.swing.JButton();
        jButton6 = new javax.swing.JButton();
        btnbuscar = new javax.swing.JButton();

        setMinimumSize(new java.awt.Dimension(780, 470));
        setPreferredSize(new java.awt.Dimension(780, 470));

        jTabbedPane1.setFont(new java.awt.Font("Lucida Grande", 0, 14));
        jTabbedPane1.setName("jTabbedPane1"); // NOI18N

        jPanel1.setName("jPanel1"); // NOI18N

        jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Datos", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, Interfaz.setFontSize()));
        jPanel4.setName("jPanel4"); // NOI18N
        jPanel4.setLayout(new java.awt.GridLayout(4, 4));

        jLabel2.setFont(Interfaz.setFontSize());
        jLabel2.setText("   Nombre:"); // NOI18N
        jLabel2.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        jLabel2.setName("jLabel2"); // NOI18N
        jPanel4.add(jLabel2);

        nombre.setEditable(false);
        nombre.setFont(Interfaz.setFontSize());
        nombre.setToolTipText("");
        nombre.setName("nombre"); // NOI18N
        jPanel4.add(nombre);

        jLabel3.setFont(Interfaz.setFontSize());
        jLabel3.setText("   Apellidos:");
        jLabel3.setName("jLabel3"); // NOI18N
        jPanel4.add(jLabel3);

        apellidos.setEditable(false);
        apellidos.setFont(Interfaz.setFontSize());
        apellidos.setToolTipText("");
        apellidos.setName("apellidos"); // NOI18N
        jPanel4.add(apellidos);

        jLabel4.setFont(Interfaz.setFontSize());
        jLabel4.setText("   DNI o Pasaporte:");
        jLabel4.setName("jLabel4"); // NOI18N
        jPanel4.add(jLabel4);

        dni.setEditable(false);
        dni.setFont(Interfaz.setFontSize());
        dni.setToolTipText("");
        dni.setName("dni"); // NOI18N
        jPanel4.add(dni);

        jLabel5.setFont(Interfaz.setFontSize());
        jLabel5.setText("   Correo:");
        jLabel5.setName("jLabel5"); // NOI18N
        jPanel4.add(jLabel5);

        correo.setEditable(false);
        correo.setFont(Interfaz.setFontSize());
        correo.setToolTipText("");
        correo.setName("correo"); // NOI18N
        jPanel4.add(correo);

        jLabel6.setFont(Interfaz.setFontSize());
        jLabel6.setText("   Telefono móvil:");
        jLabel6.setName("jLabel6"); // NOI18N
        jPanel4.add(jLabel6);

        telefono.setEditable(false);
        telefono.setFont(Interfaz.setFontSize());
        telefono.setToolTipText("");
        telefono.setName("telefono"); // NOI18N
        jPanel4.add(telefono);

        jLabel7.setFont(Interfaz.setFontSize());
        jLabel7.setText("   Fech. nacimiento:");
        jLabel7.setName("jLabel7"); // NOI18N
        jPanel4.add(jLabel7);

        fecha.setEditable(false);
        fecha.setFont(Interfaz.setFontSize());
        fecha.setToolTipText("");
        fecha.setName("fecha"); // NOI18N
        jPanel4.add(fecha);

        jLabel8.setFont(Interfaz.setFontSize());
        jLabel8.setText("   Sexo:");
        jLabel8.setName("jLabel8"); // NOI18N
        jPanel4.add(jLabel8);

        sexo.setEditable(false);
        sexo.setFont(Interfaz.setFontSize());
        sexo.setToolTipText("");
        sexo.setName("sexo"); // NOI18N
        jPanel4.add(sexo);

        jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Direcciones", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, Interfaz.setFontSize()));
        jPanel3.setName("jPanel3"); // NOI18N

        jScrollPane1.setName("jScrollPane1"); // NOI18N

        tabla_direcciones.setFont(Interfaz.setFontSize());
        tabla_direcciones.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Direccion", "Localidad", "Cod.Postal", "Pais", "Telefono"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false, false, true
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tabla_direcciones.setName("tabla_direcciones"); // NOI18N
        jScrollPane1.setViewportView(tabla_direcciones);

        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
        jPanel3.setLayout(jPanel3Layout);
        jPanel3Layout.setHorizontalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 654, Short.MAX_VALUE)
                .addContainerGap())
        );
        jPanel3Layout.setVerticalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 77, Short.MAX_VALUE)
                .addContainerGap())
        );

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 746, Short.MAX_VALUE)
            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                    .addContainerGap()
                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addComponent(jPanel4, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 706, Short.MAX_VALUE)
                        .addComponent(jPanel3, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addContainerGap()))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 331, Short.MAX_VALUE)
            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                    .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, 186, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addContainerGap()))
        );

        jTabbedPane1.addTab("Datos del paciente", jPanel1);

        historial.setName("historial"); // NOI18N

        jPanel7.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Citas", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, Interfaz.setFontSize()));
        jPanel7.setName("jPanel7"); // NOI18N

        jScrollPane7.setName("jScrollPane7"); // NOI18N

        linea_cita.setFont(Interfaz.setFontSize());
        linea_cita.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Médico", "Fecha", "Recetas", "Pruebas"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        linea_cita.setName("linea_cita"); // NOI18N
        jScrollPane7.setViewportView(linea_cita);

        javax.swing.GroupLayout jPanel7Layout = new javax.swing.GroupLayout(jPanel7);
        jPanel7.setLayout(jPanel7Layout);
        jPanel7Layout.setHorizontalGroup(
            jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel7Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane7, javax.swing.GroupLayout.DEFAULT_SIZE, 638, Short.MAX_VALUE)
                .addContainerGap())
        );
        jPanel7Layout.setVerticalGroup(
            jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel7Layout.createSequentialGroup()
                .addComponent(jScrollPane7, javax.swing.GroupLayout.DEFAULT_SIZE, 115, Short.MAX_VALUE)
                .addContainerGap())
        );

        jScrollPane8.setName("jScrollPane8"); // NOI18N

        observacionesPaciente.setFont(Interfaz.setFontSize());
        observacionesPaciente.setName("observacionesPaciente"); // NOI18N
        jScrollPane8.setViewportView(observacionesPaciente);

        jLabel11.setFont(Interfaz.setFontSize());
        jLabel11.setText("Observaciones clínicas del paciente");
        jLabel11.setName("jLabel11"); // NOI18N

        javax.swing.GroupLayout historialLayout = new javax.swing.GroupLayout(historial);
        historial.setLayout(historialLayout);
        historialLayout.setHorizontalGroup(
            historialLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(historialLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(historialLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(historialLayout.createSequentialGroup()
                        .addComponent(jLabel11)
                        .addContainerGap(502, Short.MAX_VALUE))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, historialLayout.createSequentialGroup()
                        .addGroup(historialLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jScrollPane8, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 690, Short.MAX_VALUE)
                            .addComponent(jPanel7, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addGap(36, 36, 36))))
        );
        historialLayout.setVerticalGroup(
            historialLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(historialLayout.createSequentialGroup()
                .addComponent(jPanel7, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jLabel11)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane8, javax.swing.GroupLayout.DEFAULT_SIZE, 110, Short.MAX_VALUE)
                .addContainerGap())
        );

        jTabbedPane1.addTab("Historial Paciente", historial);

        jPanel2.setName("jPanel2"); // NOI18N

        javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance().getContext().getActionMap(pantallaCita.class, this);
        jButton2.setAction(actionMap.get("anadirLineaReceta")); // NOI18N
        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance().getContext().getResourceMap(pantallaCita.class);
        jButton2.setIcon(resourceMap.getIcon("jButton2.icon")); // NOI18N
        jButton2.setLabel(resourceMap.getString("jButton2.label")); // NOI18N
        jButton2.setName("jButton2"); // NOI18N

        jButton3.setAction(actionMap.get("borrarLineaReceta")); // NOI18N
        jButton3.setIcon(resourceMap.getIcon("jButton3.icon")); // NOI18N
        jButton3.setLabel(resourceMap.getString("jButton3.label")); // NOI18N
        jButton3.setName("jButton3"); // NOI18N

        jButton4.setAction(actionMap.get("modificarLineaReceta")); // NOI18N
        jButton4.setIcon(resourceMap.getIcon("jButton4.icon")); // NOI18N
        jButton4.setLabel(resourceMap.getString("jButton4.label")); // NOI18N
        jButton4.setName("jButton4"); // NOI18N

        jPanel5.setName("jPanel5"); // NOI18N

        jScrollPane2.setName("jScrollPane2"); // NOI18N

        linea_receta_panel.setFont(Interfaz.setFontSize());
        linea_receta_panel.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Medicamento", "Posología", "Fecha inicio", "Tomas", "Estado"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, true, true, true, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        linea_receta_panel.setName("linea_receta_panel"); // NOI18N
        jScrollPane2.setViewportView(linea_receta_panel);

        javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5);
        jPanel5.setLayout(jPanel5Layout);
        jPanel5Layout.setHorizontalGroup(
            jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 598, Short.MAX_VALUE)
            .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 598, Short.MAX_VALUE))
        );
        jPanel5Layout.setVerticalGroup(
            jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 204, Short.MAX_VALUE)
            .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 204, Short.MAX_VALUE))
        );

        jLabel9.setFont(Interfaz.setFontSize());
        jLabel9.setText("Observaciones:");
        jLabel9.setName("jLabel9"); // NOI18N

        jLabel10.setFont(Interfaz.setFontSize());
        jLabel10.setText("Juicio diagnóstico:");
        jLabel10.setName("jLabel10"); // NOI18N

        jScrollPane3.setName("jScrollPane3"); // NOI18N

        observaciones.setFont(Interfaz.setFontSize());
        observaciones.setName("observaciones"); // NOI18N
        jScrollPane3.setViewportView(observaciones);

        jScrollPane4.setName("jScrollPane4"); // NOI18N

        juicio.setFont(Interfaz.setFontSize());
        juicio.setName("juicio"); // NOI18N
        jScrollPane4.setViewportView(juicio);

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
                        .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addGap(18, 18, 18)
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 72, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 72, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(jButton4, javax.swing.GroupLayout.PREFERRED_SIZE, 72, javax.swing.GroupLayout.PREFERRED_SIZE))))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel9)
                            .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 328, Short.MAX_VALUE))
                        .addGap(18, 18, 18)
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel10)
                            .addComponent(jScrollPane4, javax.swing.GroupLayout.DEFAULT_SIZE, 342, Short.MAX_VALUE))))
                .addGap(38, 38, 38))
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
                        .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel9)
                            .addComponent(jLabel10)))
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addComponent(jButton2)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton4)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton3)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 49, Short.MAX_VALUE)
                    .addComponent(jScrollPane4, javax.swing.GroupLayout.DEFAULT_SIZE, 49, Short.MAX_VALUE))
                .addContainerGap())
        );

        jTabbedPane1.addTab("Opciones de receta", jPanel2);

        jPanel6.setName("jPanel6"); // NOI18N

        jButton7.setAction(actionMap.get("modificarPrueba")); // NOI18N
        jButton7.setIcon(resourceMap.getIcon("jButton7.icon")); // NOI18N
        jButton7.setName("jButton7"); // NOI18N

        jButton8.setAction(actionMap.get("borrarPrueba")); // NOI18N
        jButton8.setIcon(resourceMap.getIcon("jButton8.icon")); // NOI18N
        jButton8.setName("jButton8"); // NOI18N

        jButton9.setAction(actionMap.get("anadirPrueba")); // NOI18N
        jButton9.setIcon(resourceMap.getIcon("jButton9.icon")); // NOI18N
        jButton9.setName("jButton9"); // NOI18N

        jScrollPane5.setName("jScrollPane5"); // NOI18N

        linea_concertar_prueba.setFont(Interfaz.setFontSize());
        linea_concertar_prueba.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Tipo Prueba", "Fecha"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        linea_concertar_prueba.setName("linea_concertar_prueba"); // NOI18N
        jScrollPane5.setViewportView(linea_concertar_prueba);

        javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6);
        jPanel6.setLayout(jPanel6Layout);
        jPanel6Layout.setHorizontalGroup(
            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel6Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane5, javax.swing.GroupLayout.DEFAULT_SIZE, 598, Short.MAX_VALUE)
                .addGap(18, 18, 18)
                .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jButton7, javax.swing.GroupLayout.PREFERRED_SIZE, 72, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButton9, javax.swing.GroupLayout.PREFERRED_SIZE, 72, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButton8, javax.swing.GroupLayout.PREFERRED_SIZE, 72, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(38, 38, 38))
        );
        jPanel6Layout.setVerticalGroup(
            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel6Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel6Layout.createSequentialGroup()
                        .addComponent(jButton9)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton7)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton8))
                    .addComponent(jScrollPane5, javax.swing.GroupLayout.DEFAULT_SIZE, 291, Short.MAX_VALUE))
                .addContainerGap())
        );

        jTabbedPane1.addTab("Concertar pruebas", jPanel6);

        jPanel8.setName("jPanel8"); // NOI18N

        jScrollPane6.setName("jScrollPane6"); // NOI18N

        observacionesCita.setColumns(20);
        observacionesCita.setFont(Interfaz.setFontSize());
        observacionesCita.setRows(5);
        observacionesCita.setName("observacionesCita"); // NOI18N
        jScrollPane6.setViewportView(observacionesCita);

        jLabel1.setFont(Interfaz.setFontSize());
        jLabel1.setText("Observaciones de la cita:");
        jLabel1.setName("jLabel1"); // NOI18N

        javax.swing.GroupLayout jPanel8Layout = new javax.swing.GroupLayout(jPanel8);
        jPanel8.setLayout(jPanel8Layout);
        jPanel8Layout.setHorizontalGroup(
            jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel8Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane6, javax.swing.GroupLayout.DEFAULT_SIZE, 706, Short.MAX_VALUE)
                    .addComponent(jLabel1))
                .addContainerGap())
        );
        jPanel8Layout.setVerticalGroup(
            jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel8Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane6, javax.swing.GroupLayout.DEFAULT_SIZE, 232, Short.MAX_VALUE)
                .addGap(55, 55, 55))
        );

        jTabbedPane1.addTab("Observaciones", jPanel8);

        jButton1.setAction(actionMap.get("aceptar")); // NOI18N
        jButton1.setIcon(resourceMap.getIcon("jButton1.icon")); // NOI18N
        jButton1.setLabel(resourceMap.getString("jButton1.label")); // NOI18N
        jButton1.setName("jButton1"); // NOI18N

        btncitaDetallada.setAction(actionMap.get("infoRecetas")); // NOI18N
        btncitaDetallada.setIcon(resourceMap.getIcon("jButton5.icon")); // NOI18N
        btncitaDetallada.setLabel(resourceMap.getString("jButton5.label")); // NOI18N
        btncitaDetallada.setName("btncitaDetallada"); // NOI18N

        jButton6.setAction(actionMap.get("cancelar")); // NOI18N
        jButton6.setIcon(resourceMap.getIcon("jButton6.icon")); // NOI18N
        jButton6.setLabel(resourceMap.getString("jButton6.label")); // NOI18N
        jButton6.setName("jButton6"); // NOI18N

        btnbuscar.setAction(actionMap.get("infoCitas")); // NOI18N
        btnbuscar.setIcon(resourceMap.getIcon("buscar.icon")); // NOI18N
        btnbuscar.setName("btnbuscar"); // NOI18N

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jTabbedPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 767, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(btncitaDetallada)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnbuscar, javax.swing.GroupLayout.PREFERRED_SIZE, 92, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 369, Short.MAX_VALUE)
                        .addComponent(jButton6)
                        .addGap(18, 18, 18)
                        .addComponent(jButton1)
                        .addGap(18, 18, 18))))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 377, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jButton1)
                    .addComponent(jButton6)
                    .addComponent(btncitaDetallada)
                    .addComponent(btnbuscar))
                .addContainerGap())
        );

        jTabbedPane1.getAccessibleContext().setAccessibleName("Pestañas");
    }// </editor-fold>//GEN-END:initComponents

    @Action
    public void anadirLineaReceta() throws SQLException, IOException, ClassNotFoundException {
        app.abrirSeleccionarMedicamento(Interfaces.PANTALLA_CITA);
    }

    @Action
    public void modificarLineaReceta() throws IOException, ClassNotFoundException, SQLException {
        int linea = linea_receta_panel.getSelectedRow();
        LineaReceta linea_r = null;
        if (linea >= 0) {
            DateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
            linea_r =  _l_linea_receta.get(linea);
            Integer tomas = null, cada = null;
            Date fecha_ini = null, hoy = null;

            try {
                tomas = Integer.parseInt(linea_receta_panel.getValueAt(linea, 3).toString());
            } catch (NumberFormatException nfe){
                app.abrirMensajeError("No se introdujo un número válido para las tomas de la receta.", Interfaces.PANTALLA_CITA);
                return;
            } try {
                if(!linea_receta_panel.getValueAt(linea, 1).toString().equals("Cada "+linea_r.getCada()+" "+linea_r.getTiempoCada()))
                    cada = Integer.parseInt(linea_receta_panel.getValueAt(linea, 1).toString());
            } catch (NumberFormatException nfe){
                app.abrirMensajeError("No se introdujo un número válido para los intervalos de las tomas (posología).", Interfaces.PANTALLA_CITA);
                return;
            }
            if(tomas < 0) {
                app.abrirMensajeError("El número de tomas no pueden ser negativas.", Interfaces.PANTALLA_CITA);
                return;
            }
            if (cada != null) {
                if(cada < 0) {
                    app.abrirMensajeError("Los intervalos de tiempo entre cada toma no pueden ser negativos.", Interfaces.PANTALLA_CITA);
                    return;
                }
            }
            String fech = linea_receta_panel.getValueAt(linea, 2).toString();
            if(fech != null) {
                if (fech.length() == 10) {
                    try {
                        fecha_ini = formato.parse(fech.substring(0,2)+"/"+fech.substring(3,5)+"/"+fech.substring(6,10));
                        hoy = formato.parse(formato.format(Calendar.getInstance().getTime()));
                    } catch (ParseException p){
                        app.abrirMensajeError("No se introdujo una fecha válida.", Interfaces.PANTALLA_CITA);
                        return;
                    }  
                } else {
                    app.abrirMensajeError("La fecha introducida no cumple con el formato: dd/mm/yyyy.", Interfaces.PANTALLA_CITA);
                    return;
                }
                if (hoy.after(fecha_ini)) {
                  app.abrirMensajeError("La fecha introducida no puede ser anterior a hoy.", Interfaces.PANTALLA_CITA);
                  return;
                }
            }
            if(cada != null) linea_r.setCada(cada);
            linea_r.setFechaInicio(fecha_ini);
            linea_r.setNumTomas(tomas);
            _l_linea_receta.set(linea, linea_r);
            app.abrirMensajeExito("Línea de receta modificada correctamente.", Interfaces.PANTALLA_CITA);
            rellenaDatosReceta(null);
        } else {
            app.abrirMensajeError("No seleccionó ninguna línea de receta para modificarla.", Interfaces.PANTALLA_CITA);
        }
    }

    @Action
    public void borrarLineaReceta() throws IOException, ClassNotFoundException, SQLException {
        int row = linea_receta_panel.getSelectedRow();
        if (row >= 0) {
            _l_linea_receta.remove(row);
            app.abrirMensajeExito("Línea de receta borrada correctamente.", Interfaces.PANTALLA_CITA);
            rellenaDatosReceta(null);
        } else {
            app.abrirMensajeError("No seleccionó ninguna línea de receta para borrarla.", Interfaces.PANTALLA_CITA);
        }
    }


        @Action
    public void anadirPrueba() throws SQLException, IOException, ClassNotFoundException, NoSuchAlgorithmException {
        app.abrirAltaPrueba(_cita,null,Interfaces.PANTALLA_CITA);
    }

    @Action
    public void modificarPrueba() throws IOException, ClassNotFoundException, SQLException, NoSuchAlgorithmException {
        int row = linea_concertar_prueba.getSelectedRow();
        if (row >= 0) {
            Prueba.deleteHard(_l_prueba.get(row));
            Prueba p = _l_prueba.get(row);
            _l_prueba.remove(row);
            app.abrirAltaPrueba(_cita,p, Interfaces.PANTALLA_CITA);
        } else {
            app.abrirMensajeError("No seleccionó ninguna prueba para modificarla.", Interfaces.PANTALLA_CITA);
        }

    }

    @Action
    public void borrarPrueba() throws IOException, ClassNotFoundException, SQLException, NoSuchAlgorithmException {
        int row = linea_concertar_prueba.getSelectedRow();
        if (row >= 0) {
            Prueba.deleteHard(_l_prueba.get(row));
            _l_prueba.remove(row);//borramos del array
            app.abrirMensajeExito("Prueba borrada correctamente.", Interfaces.PANTALLA_CITA);
            rellenaDatosPrueba(null);
        } else {
            app.abrirMensajeError("No seleccionó ninguna prueba para borrarla.", Interfaces.PANTALLA_CITA);
        }
    }
    
    @Action
    public void cancelar() throws NoSuchAlgorithmException, IOException, ClassNotFoundException, SQLException {
        //Si hay pruebas
        for(Prueba p:_l_prueba){
            Prueba.deleteHard(p);
        }

        _cita.setEstado(EstadoCita.PENDIENTE);
        Cita.update(_cita);
        app.abrirSeleccionarCita();
    }

    @Action
    public void aceptar() throws IOException, ClassNotFoundException, ParseException, SQLException, NoSuchAlgorithmException{
        LineaReceta[] lineas_receta =  new LineaReceta[_l_linea_receta.size()];
        Prueba[] pruebas = new Prueba[this._l_prueba.size()];
        Boolean berror=false;
        app.limpiaErrores();
        
        if( _l_linea_receta.size() <= 0 && _l_prueba.size() <= 0 ) {
            if (observacionesPaciente.getText().length() > 512) {
                app.addError("Las observaciones clinicas del paciente no pueden superar los 512 caracteres.");
                berror = true;
            }

            if ( !berror && !observacionesPaciente.getText().equals(_paciente.getObservaciones()) ) {
                _paciente.setObservacioenes(observacionesPaciente.getText());
                Usuario.update(_paciente);
            }

            if (observacionesCita.getText().length() > 512) {
                app.addError("Las observaciones de la cita no pueden superar los 512 caracteres.");
                berror = true;
            }

            if (!berror) {
                _cita.setEstado(EstadoCita.FINALIZADA);
                _cita.setObservaciones(observacionesCita.getText());
                Cita.update(_cita);
                app.abrirMensajeExito("Se completó la cita sin realizar ninguna receta o asignar una prueba al paciente."
                    , Interfaces.PRINCIPAL_MEDICO);
            }else
                app.muestraListaErrores();
        }
        else { //hay pruebas o recetas
            int i = 0;
            String error = null;

            if ( juicio.getText().equals("") && _l_linea_receta.size() > 0 ){
                app.addError("El campo juicio de diagnóstico de las recetas no pueden estar vacío.");
                berror = true;
            }
            
            //Si hay lineas de receta
            if (_l_linea_receta.size() >= 0) {

                i = 0;
                for(LineaReceta l:_l_linea_receta) {
                    lineas_receta[i] = l; i++;
                }
                error = Controlador.recetar(_cita.getIdCita(), observaciones.getText(), juicio.getText(), lineas_receta);
                if (error == null) {
                    if (juicio.getText().length()>256){app.addError("El campo de observaciones no puede superar 256 caracteres.");berror=true;}
                    if (observaciones.getText().length()>512){app.addError("El juicio de diagnóstico no puede superar 512 caracteres.");berror=true;}
                }else
                    berror = true;
            }

            if (observacionesCita.getText().length() > 512) {
                app.addError("Las observaciones de la cita no pueden superar los 512 caracteres.");
                berror = true;
            }
            
            //si todo esta bien actualizamos, sino mostramos errores
            if(!berror) {
                if ( !observacionesPaciente.getText().equals(_paciente.getObservaciones()) ) {
                    _paciente.setObservacioenes(observacionesPaciente.getText());
                    Usuario.update(_paciente);
                }
                _cita.setEstado(EstadoCita.FINALIZADA);
                _cita.setObservaciones(observacionesCita.getText());
                Cita.update(_cita);
                app.abrirMensajeExito("La cita ha sido realizada con exito.", Interfaces.PRINCIPAL_MEDICO);
            }
            else {
                app.muestraListaErrores();
            }
            
        }

    }

    @Action
    public void cambioTab(javax.swing.event.ChangeEvent evt){
    // esto registrara un evento cada que el usuario seleccione un tab
        if(jTabbedPane1.getSelectedIndex() == 1){
            btncitaDetallada.setVisible(false);
            btnbuscar.setVisible(true);
            btnbuscar.setEnabled(false);
        }else if(jTabbedPane1.getSelectedIndex() == 2){
            btncitaDetallada.setVisible(true);
            btncitaDetallada.setEnabled(false);
            btnbuscar.setVisible(false);
        }else {
            btncitaDetallada.setVisible(false);
            btnbuscar.setVisible(false);
        }

    }
    
    @Action
    public void infoRecetas() throws SQLException, IOException, ClassNotFoundException, NoSuchAlgorithmException, ParseException {
        app.abrirVerRecetas(_cita.getIdPaciente() ,  Interfaces.PANTALLA_CITA);
    }

    @Action
    public void infoCitas( ) throws SQLException, IOException, ClassNotFoundException, NoSuchAlgorithmException, ParseException, IDException {
        int row = linea_cita.getSelectedRow();
        app.abrirHistorialPacienteDetallado(this._citasAnteriores[row] , Interfaces.PANTALLA_CITA);
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JTextField apellidos;
    private javax.swing.JButton btnbuscar;
    private javax.swing.JButton btncitaDetallada;
    private javax.swing.JTextField correo;
    private javax.swing.JTextField dni;
    private javax.swing.JTextField fecha;
    private javax.swing.JPanel historial;
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JButton jButton6;
    private javax.swing.JButton jButton7;
    private javax.swing.JButton jButton8;
    private javax.swing.JButton jButton9;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel10;
    private javax.swing.JLabel jLabel11;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JPanel jPanel5;
    private javax.swing.JPanel jPanel6;
    private javax.swing.JPanel jPanel7;
    private javax.swing.JPanel jPanel8;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JScrollPane jScrollPane4;
    private javax.swing.JScrollPane jScrollPane5;
    private javax.swing.JScrollPane jScrollPane6;
    private javax.swing.JScrollPane jScrollPane7;
    private javax.swing.JScrollPane jScrollPane8;
    private javax.swing.JTabbedPane jTabbedPane1;
    private javax.swing.JTextPane juicio;
    private javax.swing.JTable linea_cita;
    private javax.swing.JTable linea_concertar_prueba;
    private javax.swing.JTable linea_receta_panel;
    private javax.swing.JTextField nombre;
    private javax.swing.JTextPane observaciones;
    private javax.swing.JTextArea observacionesCita;
    private javax.swing.JTextPane observacionesPaciente;
    private javax.swing.JTextField sexo;
    private javax.swing.JTable tabla_direcciones;
    private javax.swing.JTextField telefono;
    // End of variables declaration//GEN-END:variables

    private TableModel modelo;

}
